package com.iteaj.izone.spi;

import com.iteaj.util.Result;
import com.iteaj.util.module.mvc.orm.Entity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 后台权限认证服务<br>
 *      注：后台管理项目启动的时候必须提供这个服务的具体实现, 否则将出错
 * @param <T>
 */
public interface AuthorizingService<T extends AuthToken> {

    Logger logger = LoggerFactory.getLogger(AuthorizingService.class);

    AuthzUrl getAuthzUrl();

    /**
     * 登录
     * @param token
     * @return
     */
    Result login(T token);

    /**
     * 注销
     * @param admin
     * @return
     */
    Result logout(Entity admin);

    /**
     * 获取账号信息
     * @param token
     * @return
     */
    Entity getAdmin(T token);

    /**
     * 密码校验
     * @param admin
     * @return
     */
    boolean validCredentials(Entity admin, T token);

    /**
     * 返回指定用戶的权限资源
     * @return
     */
    List<Resource> getResources(Entity principal);

    /**
     * 返回视图菜单下面的功能点
     * @param id
     * @return
     */
    List<UrlResource> getFunctionPoint(Serializable id);

    /**
     * 获取管理员拥有的角色列表
     * @param admin
     * @return
     */
    Collection<String> getRoles(Entity admin);

    /**
     * 获取管理员拥有的权限列表
     * @param admin
     * @return
     */
    Collection<String> getPermissions(Entity admin);

    /**
     * 返回环境相关配置
     * @return
     */
    Map<String, Object> getEnvConfig(Entity admin);
}
